package model

// by daoyi
import (
	"gorm.io/gorm"
	"simai_oa/tool"
	"time"
)

// 角色
type File struct {
	ID        int       `gorm:"column:id;primary_key;auto_increment;comment:主键" json:"id" form:"id"`                       // 主键
	CreatedAt time.Time `gorm:"column:created_at;type:datetime;not null;comment:创建时间" json:"created_at" form:"created_at"` // 创建时间
	FileId    int       `gorm:"column:file_id;size:64;comment:文件对应数据id" json:"file_id" form:"file_id"`
	Src       string    `gorm:"column:src;not null;comment:文件地址" json:"src" form:"src"`
	Model     string    `gorm:"column:model;not null;comment:所属表" json:"model" form:"model"`
	FileType  int       `gorm:"column:file_type;not null;comment:1图片，2文件，3视频" json:"file_type" form:"file_type"`
}

// 添加前
func (m *File) BeforeCreate(tx *gorm.DB) error {
	m.CreatedAt = time.Now()
	return nil
}

func (File) CreateFile(fileId int, fileType int, path1 map[int]string, model string) error {

	var models []File
	//启动事务
	tx := tool.Gdb.Begin()
	//将图片路径存入数据库
	for _, f := range path1 {
		models = append(models, File{
			CreatedAt: time.Now(),
			Model:     model,    //表
			FileType:  fileType, //文件类型
			FileId:    fileId,   //数据id
			Src:       f,
		})
	}
	//写入数据库
	err := tx.Create(&models).Error
	if err != nil {
		//事务回滚
		tx.Rollback()
		return err
	}
	//事务提交
	err1 := tx.Commit().Error
	if err1 != nil {
		return err1
	}
	return nil
}

// 删除角色及关联数据
func (File) Delete(srcs []uint64) error {
	tx := tool.Gdb.Begin()
	defer func() {
		if r := recover(); r != nil {
			tx.Rollback()
		}
	}()
	if err := tx.Error; err != nil {
		tx.Rollback()
		return err
	}
	if err := tx.Where("src in (?)", srcs).Delete(&File{}).Error; err != nil {
		tx.Rollback()
		return err
	}

	//err1 := os.Remove("filepath/test.txt")
	//if err1 != nil {
	//	fmt.Println("文件删除失败：", err1)
	//}

	//if err := tx.Where("role_id in (?)", roleids).Delete(&RoleMenu{}).Error; err != nil {
	//	tx.Rollback()
	//	return err
	//}
	return tx.Commit().Error
}
